package testEnmu;

import java.lang.reflect.Constructor;

public class testReflectEnum {
    // 枚举和反射
    public static void reflectPrivateConstructor() {
        try {
            Class<?> classStudent = Class.forName("testEnmu.TestEnmu");
            //注意传入对应的参数,获得对应的构造方法来构造对象,当前枚举类是提供了两个参数分别是String和int。
            Constructor<?> declaredConstructorStudent =
                    classStudent.getDeclaredConstructor(String.class,int.class,String.class,int.class);
            //设置为true后可修改访问权限
            declaredConstructorStudent.setAccessible(true);
            //后两个为子类参数，大家可以将当前枚举类的key类型改为double验证
            Object objectStudent = declaredConstructorStudent.newInstance("父类参数",666,"子类参数",888);
            TestEnmu testEnum = (TestEnmu) objectStudent;
            System.out.println("获得枚举的私有构造函数："+testEnum);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String[] args) {
        reflectPrivateConstructor();
        // 嗯！没错，他还报错了，不过这次就是我想要的结果！此时的异常信息显示，是我的一个方法这个方法是：
        //newInstance()报错了！没错，问题就是这里，我们来看一下这个方法的源码，为什么会抛出
        //java.lang.IllegalArgumentException:异常呢？

        // 所以有一个结论 ****在类外是不能反射枚举的****
    }
}
